package cn.gok;

class P{
    //父类对象
}
class C extends P{
    //子类对象
    public void  testInC(){
        System.out.println("testInc");
    }
}
//不使用泛型
class A{
    private P p;

    public A(P p) {
        this.p = p;
    }
    public void test(){
        //把父类对象向下转型
        C c = (C) p;
        c.testInC();
    }
}
//使用泛型
class B <T extends C>{
    //指定上界为C类的泛型参数
    private T t;

    public B(T t) {
        this.t = t;
    }
    public void test(){
        //无需向下转型
        t.testInC();
    }
}
public class 泛型的例子 {
    public static void main(String[] args) {
        A a = new A(new C());
        a.test();
        B b = new B(new C());
        b.test();
    }
}
